package DataStructure.array;

/**
 * 59. 螺旋矩阵 II https://leetcode.cn/problems/spiral-matrix-ii
 */
public class GenerateMatrix {

    public int[][] generateMatrix(int n) {
        int[][] result = new int[n][n];
        int currentNum = 1;
        //每次循环中绕一圈，一圈两层，故每圈中向一个方向移动的步数相较于上圈要减二
        for(int c=1;c <= n/2 + n%2;c++) {
            //第c圈的起点坐标：（c-1, c-1）
            //向下为x轴，向右为y轴
            int x=c-1,y=c-1;
            result[x][y] = currentNum++;
            //向右移动n+1-2*c格
            for(int i=1;i <= n+1-2*c;i++) {
                result[x][++y] = currentNum++;
            }
            //向下移动n+1-2*c格
            for(int i=1;i <= n+1-2*c;i++) {
                result[++x][y] = currentNum++;
            }
            //向左移动n+1-2*c格
            for(int i=1;i <= n+1-2*c;i++) {
                result[x][--y] = currentNum++;
            }
            //向上移动n-2*c格
            for(int i=1;i <= n-2*c;i++) {
                result[--x][y] = currentNum++;
            }
        }
        return result;
    }
}
